import numpy as np
from keras.models import Sequential
from keras.layers import Dense

'''
代码说明
数据生成：
使用 generate_data 函数生成随机数据。
每个训练样本的输入是一个长度为34的向量，目标输出是一个长度为1的向量。
模型构建：
使用 Sequential 模型。
输入层大小为34（4个7维向量和1个6维向量）。
第一个隐藏层有128个神经元，使用 ReLU 激活函数。
第二个隐藏层有64个神经元，使用 ReLU 激活函数。
输出层大小为1，使用线性激活函数。
训练和预测：
使用 adam 优化器和均方误差损失函数。
训练50个周期，批量大小为32。
使用 model.predict 进行预测，并打印一些预测结果和实际结果。
注意事项
数据量：实际应用中，需要有足够的数据来训练模型，以提高预测的准确性。
模型调整：根据问题的复杂性，可以调整隐藏层的数量和神经元的数量，或者尝试不同的激活函数。
归一化：如果数据的范围较大，建议对输入数据进行归一化处理，以提高训练效果。
这个示例展示了如何使用全连接神经网络来预测第5个向量的第7维数据。你可以根据实际需求进一步优化和调整模型。
'''

array_num = 4
array_columns = 7
input_columns = (array_num + 1) * array_columns - 1

# 示例数据生成函数
def generate_data(num_samples=1000):
    # 生成随机数据
    X = np.random.rand(num_samples, input_columns)  # 4个7维向量和1个6维向量
    y = np.random.rand(num_samples, 1)  # 第5个向量的第7维数据
    return X, y

# 生成训练数据
X_train, y_train = generate_data(num_samples=1000)
X_test, y_test = generate_data(num_samples=200)

# 构建全连接神经网络模型
model = Sequential()
model.add(Dense(128, input_dim=input_columns, activation='relu'))  # 输入层和第一个隐藏层
model.add(Dense(64, activation='relu'))  # 第二个隐藏层
model.add(Dense(1))  # 输出层

# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)

# 使用模型进行预测
y_pred = model.predict(X_test)

# 打印一些预测结果
print("Predicted values:", y_pred[:5])
print("Actual values:", y_test[:5])